package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.SysAlert;
import com.ruoyi.system.domain.qo.AlertListQo;
import com.ruoyi.system.domain.vo.IndexVo;
import com.ruoyi.system.domain.vo.AlertLevelNameCount;
import com.ruoyi.system.domain.vo.AlertListVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 预警列表 数据层
 *
 * @author ruoyi
 */
public interface SysAlertMapper {
    /**
     * 查询预警信息
     *
     * @param id 预警ID
     * @return 预警信息
     */
    SysAlert selectSysAlertById(Long id);

    /**
     * 查询预警列表
     *
     * @param sysAlert 预警信息
     * @return 预警集合
     */
    List<SysAlert> selectSysAlertList(SysAlert sysAlert);

    /**
     * 查询预警列表
     *
     * @param alertListQo 预警信息
     * @return 预警集合
     */
    List<AlertListVo> selectAlertList(AlertListQo alertListQo);

    /**
     * 查询聚合列表
     *
     * @param alertListQo 预警信息
     * @return 预警集合
     */
    List<AlertListVo> selectAggregateList(AlertListQo alertListQo);

    /**
     * 新增预警
     *
     * @param sysAlert 预警信息
     * @return 结果
     */
    int insertSysAlert(SysAlert sysAlert);

    /**
     * 修改预警
     *
     * @param sysAlert 预警信息
     * @return 结果
     */
    int updateSysAlert(SysAlert sysAlert);

    /**
     * 修改预警
     *
     * @param sysAlert 预警信息
     * @return 结果
     */
    int recoveryAlert(SysAlert sysAlert);

    /**
     * 修改预警
     *
     * @param sysAlert 预警信息
     * @return 结果
     */
    int recoveryRelatedAlert(SysAlert sysAlert);

    /**
     * 删除预警
     *
     * @param id 预警ID
     * @return 结果
     */
    int deleteSysAlertById(Long id);

    /**
     * 批量删除预警
     *
     * @param ids 需要删除的预警ID
     * @return 结果
     */
    int deleteSysAlertByIds(Long[] ids);

    /**
     * 按预警等级和预警名称统计数量
     */
    List<AlertLevelNameCount> countAlertByLevelAndName();

    /**
     * 获取服务用户数量
     *
     * @param condition 条件 空或null 所有，1， 当前服务用户
     * @return 服务用户数量
     */
    Long getTodayAlertCount(String condition);

    /**
     * 按小时统计当天的预警信息
     *
     * @return 预警统计信息
     */
    List<IndexVo> countAlertByMinutes(@Param("minutes") Long minutes, @Param("alertLevel") String alertLevel);

    /**
     * 按小时统计当天的预警信息
     *
     * @return 预警统计信息
     */
    List<IndexVo> countAlertByHour(String alertLevel);

    /**
     * 按天统计当月的预警信息
     *
     * @return 预警统计信息
     */
    List<IndexVo> countAlertByDay(String alertLevel);

    /**
     * 查询用户最近一个预警信息
     *
     * @param userId 用户ID
     * @return 预警信息
     */
    SysAlert selectLatestAlertByUserId(Long userId);
}